#ifndef __SESSION_H__
#define __SESSION_H__

#include "Diccionario.h"
#include "SDL.h"
#include "Widget.h"
#include "TextBox.h"

#define REGISTER_LOGIN_ATT "newLogin"
#define REGISTER_PASSW_ATT "newPassw"
#define REGISTER_PASSW_CONF_ATT "newPasswConf"

#define PLAYER_ONE_LOGIN_ATT "playerOneLogin"
#define PLAYER_ONE_PASSW_ATT "playerOnePassw"
#define PLAYER_TWO_LOGIN_ATT "playerTwoLogin"
#define PLAYER_TWO_PASSW_ATT "playerTwoPassw"

/**
 * Implentacion basica de una "bolsa de datos" para manejar la informacion ingresada por pantalla
 */
class Session{
	Diccionario* attributes;
	static Session* instance;

public:

	/**
	 * Inicializa el diccionario de atributos 
	 */
	Session();

	/**
	 * Devuelve un puntero a la unica instancia existente de la sesion (de ser necesario la crea)
	 */
	static Session* getInstance();

	/**
	 * Guarda en sesion el nombre de usuario del primer jugador
	 */
	static void setPlayerOneLogin(Widget* widget, const SDL_Event& event);

	/**
	 * Obtiene de sesion el nombre de usuario del primer jugador
	 */
	string* getPlayerOneLogin();

	/**
	 * Guarda en sesion el nombre de usuario del segundo jugador
	 */
	static void setPlayerTwoLogin(Widget* widget, const SDL_Event& event);

	/**
	 * Obtiene de sesion el nombre de usuario del segundo jugador
	 */
	string* getPlayerTwoLogin();

	/**
	 * Guarda en sesion el password del primer jugador
	 */
	static void setPlayerOnePass(Widget* widget, const SDL_Event& event);

	/**
	 * Obtiene de sesion el password del primer jugador
	 */
	string* getPlayerOnePass();

	/**
	 * Guarda en sesion el password del segundo jugador
	 */
	static void setPlayerTwoPass(Widget* widget, const SDL_Event& event);

	/**
	 * Obtiene de sesion el password del segundo jugador
	 */
	string* getPlayerTwoPass();

	/**
	 * Guarda en sesion el nombre del usuario a registrar
	 */
	static void setNewPlayerLogin(Widget* widget, const SDL_Event& event);

	/**
	 * Obtiene de sesion el nombre del usuario a registrar
	 */
	string* getNewPlayerLogin();

	/**
	 * Guarda en sesion el password del usuario a registrar
	 */
	static void setNewPlayerPass(Widget* widget, const SDL_Event& event);

	/**
	 * Obtiene de sesion el password del usuario a registrar
	 */
	string* getNewPlayerPass();

	/**
	 * Guarda en sesion la confirmacion del password del usuario a registrar
	 */
	static void setNewPlayerPassConf(Widget* widget, const SDL_Event& event);

	/**
	 * Obtiene de sesion la confirmacion del password del usuario a registrar
	 */
	string* getNewPlayerPassConf();

	/**
	 * Establece el valor de un atributo de la sesion
	 */
	void setAttribute(const string& attName, const string& attValue);

	/**
	 * Devuelve el valor de un atributo de la sesion (NULL si al atributo nunca se le asigno un valor)
	 */
	string* getAttribute(const string& attName);

	/**
	 * Reinicializa la sesion (elimina todos los atributos guardados)
	 */
	void clear();

	/**
	 * Destruye la sesion
	 */
	void destroy();

	/**
	 * Simplemente invoca al metodo destroy()
	 */
	virtual ~Session();
};

#endif